UrlParm = function() { // url参数  
  var data, index;  
  (function init() {  
    data = [];  
    index = {};  
    var u = window.location.search.substr(1);  
    if (u != '') {  
      var parms = decodeURIComponent(u).split('&');  
      for (var i = 0, len = parms.length; i < len; i++) {  
        if (parms[i] != '') {  
          var p = parms[i].split("=");  
          if (p.length == 1 || (p.length == 2 && p[1] == '')) {// p | p=  
            data.push(['']);  
            index[p[0]] = data.length - 1;  
          } else if (typeof(p[0]) == 'undefined' || p[0] == '') { // =c | =  
            data[0] = [p[1]];  
          } else if (typeof(index[p[0]]) == 'undefined') { // c=aaa  
            data.push([p[1]]);  
            index[p[0]] = data.length - 1;  
          } else {// c=aaa  
            data[index[p[0]]].push(p[1]);  
          }  
        }  
      }  
    }  
  })();  
  return {  
    // 获得参数,类似request.getParameter()  
    parm : function(o) { // o: 参数名或者参数次序  
      try {  
        return (typeof(o) == 'number' ? data[o][0] : data[index[o]][0]);  
      } catch (e) {  
      }  
    },  
    //获得参数组, 类似request.getParameterValues()  
    parmValues : function(o) { //  o: 参数名或者参数次序  
      try {  
        return (typeof(o) == 'number' ? data[o] : data[index[o]]);  
      } catch (e) {}  
    },  
    //是否含有parmName参数  
    hasParm : function(parmName) {  
      return typeof(parmName) == 'string' ? typeof(index[parmName]) != 'undefined' : false;  
    },  
    // 获得参数Map ,类似request.getParameterMap()  
    parmMap : function() {  
      var map = {};  
      try {  
        for (var p in index) {  map[p] = data[index[p]];  }  
      } catch (e) {}  
      return map;  
    }  
  }  
}();  


////////使用方法///////////
// index.html:

// <script type="text/javascript"  src="js/getUrlParam.js"></script>  
// <a href="index2.html?name=caoy">静态传值</a>  

// index2.html:

// <script type="text/javascript">  
//     var name=UrlParm.parm("name");  
//     alert(name);  
// </script>  



//JSP中getParameter与getAttribute有何区别？

//——getParameter得到的都是String类型的。或者是http://a.jsp?id=123中的123，或者是某个表单提交过去的数据。
//——getAttribute则可以是对象。
//——getParameter()是获取POST/GET传递的参数值；
//——getAttribute()是获取对象容器中的数据值；
//——getParameter：用于客户端重定向时，即点击了链接或提交按扭时传值用，即用于在用表单或url重定向传值时接收数据用。
//——getAttribute：用于服务器端重定向时，即在sevlet中使用了forward函数,或struts中使用了mapping.findForward。getAttribute只能收到程序用setAttribute传过来的值。
//——getParameter()是获取POST/GET传递的参数值；
//——getAttribute()是获取SESSION的值；
//另外，可以用setAttribute,getAttribute发送接收对象.而getParameter显然只能传字符串。
//setAttribute 是应用服务器把这个对象放在该页面所对应的一块内存中去，当你的页面服务器重定向到另一个页面时，应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样getAttribute就能取得你所设下的值，当然这种方法可以传对象。session也一样，只是对象在内存中的生命周期不一样而已。
//getParameter只是应用服务器在分析你送上来的request页面的文本时，取得你设在表单或url重定向时的值。
//
//getParameter   返回的是String,   用于读取提交的表单中的值;       
//getAttribute   返回的是Object，需进行转换,可用setAttribute设置成任意对象，使用很灵活，可随时用；